/**
 *
 *  Copyright (c) 2011, AstroDAbis
 *  All rights reserved.
 *
 *  Redistribution and use in source and binary forms, with or without modification,
 *  are permitted provided that the following conditions are met:
 *
 *      * Redistributions of source code must retain the above copyright notice,
 *        this list of conditions and the following disclaimer.
 *      * Redistributions in binary form must reproduce the above copyright notice,
 *        this list of conditions and the following disclaimer in the documentation
 *        and/or other materials provided with the distribution.
 *
 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 *  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 *  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 *  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
 *  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
 *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 *  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
 *  OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 *  OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 */
package org.jiscinvolve.astrodabis.mallow.impl.model.tap;

import javax.persistence.Table;
import javax.persistence.Column;
import javax.persistence.Entity;

import javax.persistence.ManyToOne;
import javax.persistence.JoinColumn;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import org.jiscinvolve.astrodabis.mallow.model.api.JoinData;

import org.jiscinvolve.astrodabis.mallow.model.tap.TapJoin;
import org.jiscinvolve.astrodabis.mallow.model.tap.TapTable;
import org.jiscinvolve.astrodabis.mallow.model.tap.TapObject;
import org.jiscinvolve.astrodabis.mallow.model.tap.TapService;

import org.jiscinvolve.astrodabis.mallow.impl.model.jpa.PersistentObjectImpl;

/**
 * Implementation of the TapJoin interface.
 *
 */
@Entity
@Table(name="tapjoins")
public class TapJoinImpl
extends PersistentObjectImpl
implements TapJoin
    {

    /**
     * Our debug logger.
     * 
     */
    private static Log log = LogFactory.getLog(TapJoinImpl.class);

    /**
     * Protected constructor.
     *
     */
    protected TapJoinImpl()
        {
        super();
        }

    /**
     * Protected constructor.
     *
     */
    public TapJoinImpl(JoinData data)
        {
        super();

        this.t1 = data.t1() ;
        this.p1 = data.p1() ;

        this.t2 = data.t2() ;
        this.p2 = data.p2() ;

        }

    /**
     * Protected constructor.
     * @deprecated
     */
    public TapJoinImpl(TapTable t1, TapTable t2, String p1, String p2)
        {
        super();

        this.t1 = t1 ;
        this.p1 = p1 ;

        this.t2 = t2 ;
        this.p2 = p2 ;
        }

    /**
     * The left hand table.
     *
     */
    @ManyToOne(targetEntity=TapTableImpl.class)
    @JoinColumn(name="t1")
    private TapTable t1;

    /**
     * The left hand primary key.
     *
     */
    @Column(name="p1")
    private String p1 ;

    /**
     * The right hand table.
     *
     */
    @ManyToOne(targetEntity=TapTableImpl.class)
    @JoinColumn(name="t2")
    private TapTable t2;

    /**
     * The right hand primary key.
     *
     */
    @Column(name="p2")
    private String p2 ;

    /**
     * The left hand row.
     *
     */
    public TapObject left()
        {
        return new TapObject(
            t1,
            p1
            );
        }

    /**
     * The right hand row.
     *
     */
    public TapObject right()
        {
        return new TapObject(
            t2,
            p2
            );
        }
    }



